﻿// bit位基本操作 
//
//#define POST_TYPE_MAP1(XX)                                                   \
//XX(NONE,NONE)                                                               \
//XX(CONNECTING, CONNECTING)                                                  \
//XX(CONNECT_FAIL_WAIT_TIMEOUT, CONNECT_FAIL_WAIT_TIMEOUT)                   \
//XX(TIMER_RECONNECTING, TIMER_RECONNECTING)                                  \
//XX(WRITEING, WRITEING)                                                      \
//XX(READING, READING)                                                        \
//XX(SHUTDOWN, SHUTDOWN)                                                      \
//XX(CLOSE, CLOSE)                                                            \
//
//typedef enum
//{
//#define XX(uc,lc) POST1_##uc,
//    POST_TYPE_MAP1(XX)
//#undef  XX 
//    POST1_MAX
//} e_post_type1;
//
//int get_post_mask(e_post_type1 e) {
//    const static int static_post_mask[POST1_MAX] = {
//#define XX(uc,lc) 1 << POST1_##uc,
//    POST_TYPE_MAP1(XX)
//#undef  XX
//    };
//    return static_post_mask[e];
//}
//
//int main() {
//    int mask_total = 0;
//    for (int i = (int)POST1_NONE; i < (int)POST1_MAX; i++) {
//        int mask = get_post_mask((e_post_type1)i);
//        mask_total |= mask;
//        char s[10] = {0};
//        _itoa_s(mask_total, s, 2);
//        printf("二进制 --> %s\n", s);
//    }
//    printf("==========================\n");
//    for (int i = (int)POST1_NONE; i < (int)POST1_MAX; i++) {
//        int mask = get_post_mask((e_post_type1)i);
//        mask_total &= (~mask);
//        char s[10] = {0};
//        _itoa_s(mask_total, s, 2);
//        printf("二进制 --> %s\n", s);
//    }
//    /**
//        二进制 --> 00000001
//        二进制 --> 00000011
//        二进制 --> 00000111
//        二进制 --> 00001111
//        二进制 --> 00011111
//        二进制 --> 00111111
//        二进制 --> 01111111
//        二进制 --> 11111111
//        ==========================
//        二进制 --> 11111110
//        二进制 --> 11111100
//        二进制 --> 11111000
//        二进制 --> 11110000
//        二进制 --> 11100000
//        二进制 --> 11000000
//        二进制 --> 10000000
//        二进制 --> 00000000
//    */
//typedef struct
//{
//    int32_t node_tag;
//    QUEUE node;
//}QNode, * PQNode;
//
//PQNode createQNode(int32_t nodeTag) {
//    PQNode q1 = new QNode;
//    q1->node_tag = nodeTag;
//    QUEUE_INIT(&q1->node);
//    return q1;
//}
//
//void printQueue(QUEUE* h) {
//    if (QUEUE_EMPTY(h)) {
//        std::cout << "queue is empty" << std::endl;
//        return;
//    }
//    do {
//        QUEUE* p = nullptr;
//        QUEUE_FOREACH(p, h) {
//            PQNode pNode = QUEUE_DATA(p, QNode, node);
//            if (pNode) {
//                std::cout << pNode->node_tag << "  ";
//            }
//        }
//        std::cout << "\n---------------------\n";
//    } while (0);
//}


//struct my_type* create_rb_node(int i) {
//    struct my_type* node1 = new struct my_type;
//    RB_SET(node1, NULL, node);
//    node1->id = i;
//    return node1;
//}

//do {
 //    struct myTree tree;
 //    RB_INIT(&tree);
 //    struct my_type* node1 = create_rb_node(1);
 //    struct my_type* node2 = create_rb_node(2);
 //    struct my_type* node3 = create_rb_node(3);
 //    struct my_type* node4 = create_rb_node(4);

 //    myTree_RB_INSERT(&tree, node1);
 //    myTree_RB_INSERT(&tree, node2);
 //    myTree_RB_INSERT(&tree, node3);
 //    myTree_RB_INSERT(&tree, node4);
 //    struct my_type* tmp = NULL;
 //    RB_FOREACH(tmp, myTree, &tree) {
 //        std::cout << tmp->id << std::endl;
 //    }
 //    std::cout << "------------------------" << std::endl;
 //    struct my_type my_find_help;
 //    my_find_help.id = 1;
 //    struct my_type* type1 = myTree_RB_FIND(&tree, &my_find_help);
 //    my_find_help.id = 22;
 //    struct my_type* type2 = myTree_RB_FIND(&tree, &my_find_help);

 //    struct my_type* find1 = myTree_RB_REMOVE(&tree, type1);
 //    // my_find_help.id = 2;
 //    // struct my_type* find2 = myTree_RB_REMOVE(&tree, &my_find_help); ///remove 之前一定要find成功 否则必死无疑啊

 //    RB_FOREACH(tmp, myTree, &tree) {
 //        std::cout << tmp->id << std::endl;
 //    }
 //    std::cout << "######################" << std::endl;

 //    while (!RB_EMPTY(&tree)) {
 //        struct my_type* tmp = RB_ROOT(&tree);
 //        std::cout << tmp->id << std::endl;
 //        myTree_RB_REMOVE(&tree, RB_ROOT(&tree));
 //    }
 //    std::cout << "**********************" << std::endl;

 //    RB_FOREACH(tmp, myTree, &tree) {
 //        std::cout << tmp->id << std::endl;
 //    }
 //    auto debug = 0;
 //    debug++;
 //} while (0);

 //do {
 //    PSTailList list = nullptr;
 //    for (auto i = 0; i < 10; i++) {
 //        auto node = createTailListNode(i);
 //        insterTailList(list, node);
 //    }
 //    travelTailList(list);
 //    auto debug = 0;
 //    debug++;
 //} while (0);


//do {
//    QUEUE head1;
//    QUEUE_INIT(&head1);
//    auto q1 = createQNode(1);
//    auto q2 = createQNode(2);
//    auto q3 = createQNode(3);
//    auto q4 = createQNode(4);
//    auto q5 = createQNode(5);
//    auto q6 = createQNode(6);
//    QUEUE_INSERT_HEAD(&head1, &q1->node);
//    QUEUE_INSERT_HEAD(&head1, &q2->node);
//    QUEUE_INSERT_HEAD(&head1, &q3->node);
//    QUEUE_INSERT_HEAD(&head1, &q4->node);
//    QUEUE_INSERT_HEAD(&head1, &q5->node);
//    QUEUE_INSERT_HEAD(&head1, &q6->node);
//    printQueue(&head1);
//    QUEUE head2;
//    QUEUE_INIT(&head2);
//    auto q21 = createQNode(21);
//    auto q22 = createQNode(22);
//    auto q23 = createQNode(23);
//    QUEUE_INSERT_HEAD(&head2, &q21->node);
//    QUEUE_INSERT_HEAD(&head2, &q22->node);
//    QUEUE_INSERT_HEAD(&head2, &q23->node);
//
//    printQueue(&head2);
//    QUEUE_ADD(&head1, &head2);///果然是将head2中的元素添加到head1后面
//    std::cout << "\n@@@@@@@@@@  <head1> @@@@@@@@@@@@@\n";
//
//    printQueue(&head1);
//    // printQueue(&head2);
//    std::cout << "\n@@@@@@@@@@@ <mq> @@@@@@@@@@@@\n";
//
//    QUEUE mq;
//    QUEUE_MOVE(&head1, &mq);
//
//    printQueue(&mq);
//    std::cout << "\n@@@@@@@@@@@ <split> @@@@@@@@@@@@\n";
//
//    QUEUE qn;
//    QUEUE_INIT(&qn);
//    QUEUE_SPLIT(&mq, &q3->node, &qn);
//
//    printQueue(&mq);
//    printQueue(&qn);
//
//
//
//    auto debug = 0;
//    debug++;
//
//} while (0);

//
//#include <stdio.h>
//#include <stdlib.h>
//#include <io.h>
//#include <time.h>
//
//int main(void) {
//    struct _finddata_t c_file;
//    intptr_t hFile;
//
//    // Find first .c file in current directory
//    if ((hFile = _findfirst("*.c", &c_file)) == -1L)
//        printf("No *.c files in current directory!\n");
//    else {
//        printf("Listing of .c files\n\n");
//        printf("RDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ');
//        printf("--- --- --- ---  ----         ---- %25c ----\n", ' ');
//        do {
//            char buffer[30];
//            printf((c_file.attrib & _A_RDONLY) ? " Y  " : " N  ");
//            printf((c_file.attrib & _A_HIDDEN) ? " Y  " : " N  ");
//            printf((c_file.attrib & _A_SYSTEM) ? " Y  " : " N  ");
//            printf((c_file.attrib & _A_ARCH) ? " Y  " : " N  ");
//            ctime_s(buffer, _countof(buffer), &c_file.time_write);
//            printf(" %-12s %.24s  %9ld\n",
//                   c_file.name, buffer, c_file.size);
//        } while (_findnext(hFile, &c_file) == 0);
//        _findclose(hFile);
//    }
//}
